package com.nw.dsl4j.runtime.parser;

public class Dsl4jParserFactory {
	public static <D> Dsl4jParser<D> createParser(Class<D> c) {
		return createParser(Dsl4jParserFactory.class.getClassLoader(), c,c, null);
	}
	public static <D> Dsl4jParser<D> createParser(Class<D> c, Dsl4jParserContext parserContext) {
		return createParser(Dsl4jParserFactory.class.getClassLoader(), c,c, parserContext);
	}
	
	@SuppressWarnings("unchecked")
	public static <D,P> Dsl4jParser<P> createParser(ClassLoader classLoader, Class<D> dslClass, Class<P> classToParse, Dsl4jParserContext parserContext) {
		try{
			return new Dsl4jParserImpl<P>(dslClass, classToParse, parserContext);
		} catch (Exception e) {
			return new Java6RuntimeCompilerDsl4jParserImpl(classLoader, dslClass, classToParse, parserContext);
		}
	}
	
	public static <D,P> Dsl4jParser<P> createParser(Class<D> dslClass, Class<P> classToParse) {
		return createParser(Dsl4jParserFactory.class.getClassLoader(), dslClass, classToParse, null);
	}
	
	public static <D> Dsl4jParser<D> createParser(ClassLoader classLoader, Class<D> c) {
		return createParser(classLoader, c,c, null);
	}
}
